Shell Parameter Expansion
ググラビリティ低いので困る
めっちゃ種類ある
code:aaa
$ man bash | grep "^\s*\${.*}$" | tr -d " "
${parameter}
${parameter:-word}
${parameter:=word}
${parameter:?word}
${parameter:+word}
${parameter:offset}
${parameter:offset:length}
${!prefix*}
${!prefix@}
${#parameter}
${parameter#word}
${parameter##word}
${parameter%word}
${parameter%%word}
${parameter/pattern/string}
${hoge:=word}
$hogeが未定義かnullの場合、wordを代入して、それを展開
jsでの$hoge || $hoge="word"
${hoge:-word}
$hogeが未定義かnullの場合、wordを展開
いずれにせよ$hogeになにか代入したわけではないので値は変わらない
jsでの$hoge || "word"
code:ex.shell
$ A=aaa
$ echo ${B:-bbb} # $Bは未定義なので"bbb"が入る
bbb
$ echo ${A:-bbb} # $Aは定義済みなので$Aの値を返す
aaa
${hoge:?word}
$hogeが未定義かnullの場合、word を標準エラー出力に出力して終了
${hoge:+word}
jsでの$hoge && "word"
:の有無
${hoge:=word}
$hogeが未定義かnullの場合、wordを代入する
${hoge=word}
$hogeが未定義の場合、wordを代入する
code:ex.shell
$ echo ${A1:=word} # A1は未定義なのでwordが入る
word
$ A2= # A2にnullを入れる
$ echo ${A2:=word} # A2はnullなのでwordが入る
word
$ echo ${A3=word} # A3は未定義なのでwordが入る
word
$ A4= # A4にnullを入れる
$ echo ${A4=word} # A4はnullなので、nullが返される
# ←null
21種類あるらしい
それぞれの解説